package service

import (
	"fmt"
	"server/global"
	"server/model"

	"gorm.io/gorm"
)

// add auto
func AutoAdd(a model.Auto) (err error) {
	err = global.DB.Create(&a).Error
	return err
}

// delete
func AutoDelete(a model.Auto) (err error) {
	err = global.DB.Delete(&a).Error
	return err
}

// edit auto
func AutoEdit(a model.Auto) (err error) {
	err = global.DB.Save(a).Error
	return err
}

// is exist
func AutoExist(a model.Auto) (bool, error) {
	var auto model.Auto
	err := global.DB.Where("id = ?", a.ID).First(&auto).Error
	if err != nil && err != gorm.ErrRecordNotFound {
		return false, err
	}
	if auto.ID > 0 {
		return true, err
	}
	return false, nil
}

// get all
func AutoGetAll() ([]*model.Auto, error) {
	var autos []*model.Auto
	err := global.DB.Raw("SELECT * FROM autos").Scan(&autos).Error
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, err
	}
	return autos, nil
}

// get
func AutoGet(u model.Auto) (*model.Auto, error) {
	var auto model.Auto
	err := global.DB.Where("id = ?", u.ID).First(&auto).Error
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, err
	}
	return &auto, nil
}

// fetch
func AutoGetEnableBySn(sn string) ([]*model.Auto, error) {
	var autos []*model.Auto
	sql_str := fmt.Sprintf(" SELECT * FROM `autos` WHERE `enable`=1 AND `condition` LIKE '%%%v%%' ", sn)
	err := global.DB.Raw(sql_str).Scan(&autos).Error
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, err
	}
	return autos, nil
}
